package com.chenyaowei.product.service.impl;

import com.chenyaowei.common.constant.CacheConstants;
import com.chenyaowei.common.core.redis.RedisCache;
import com.chenyaowei.common.exception.ServiceException;
import com.chenyaowei.product.domain.CywProSkuInfo;
import com.chenyaowei.product.domain.CywProSpuInfo;
import com.chenyaowei.product.mapper.CywProSkuInfoMapper;
import com.chenyaowei.product.service.ICywProSkuInfoService;
import com.chenyaowei.product.service.ICywProSpuInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * sku信息Service业务层处理
 *
 * @author 陈耀威
 * @date 2023-11-24
 */
@Service
public class CywProSkuInfoServiceImpl implements ICywProSkuInfoService
{
    @Autowired
    private CywProSkuInfoMapper cywProSkuInfoMapper;

    @Autowired
    private ICywProSpuInfoService spuInfoService;

    @Autowired
    private RedisCache redisCache;

    /**
     * 查询sku信息
     *
     * @param skuId sku信息主键
     * @return sku信息
     */
    @Override
    public CywProSkuInfo selectCywProSkuInfoBySkuId(Long skuId)
    {

        return cywProSkuInfoMapper.selectCywProSkuInfoBySkuId(skuId);
    }

    /**
     * 查询sku信息列表
     *
     * @param cywProSkuInfo sku信息
     * @return sku信息
     */
    @Override
    public List<CywProSkuInfo> selectCywProSkuInfoList(CywProSkuInfo cywProSkuInfo)
    {
        return cywProSkuInfoMapper.selectCywProSkuInfoList(cywProSkuInfo);
    }

    /**
     * 新增sku信息
     *
     * @param cywProSkuInfo sku信息
     * @return 结果
     */
    @Override
    public int insertCywProSkuInfo(CywProSkuInfo cywProSkuInfo)
    {
        return cywProSkuInfoMapper.insertCywProSkuInfo(cywProSkuInfo);
    }

    /**
     * 修改sku信息
     *
     * @param cywProSkuInfo sku信息
     * @return 结果
     */
    @Override
    public int updateCywProSkuInfo(CywProSkuInfo cywProSkuInfo)
    {
        // TODO es
        redisCache.deleteObject(CacheConstants.PRODUCT_CACHE + "*");
        return cywProSkuInfoMapper.updateCywProSkuInfo(cywProSkuInfo);
    }

    /**
     * 批量删除sku信息
     *
     * @param skuIds 需要删除的sku信息主键
     * @return 结果
     */
    @Override
    public int deleteCywProSkuInfoBySkuIds(Long[] skuIds)
    {
        List<CywProSkuInfo> cywProSkuInfos = cywProSkuInfoMapper.selectListBySkuIds(Arrays.asList(skuIds));
        List<Long> spuIds = cywProSkuInfos.stream().map(CywProSkuInfo::getSpuId).collect(Collectors.toList());
        List<CywProSpuInfo> proSpuInfoList = spuInfoService.selectListBySpuIds(spuIds);
        proSpuInfoList.forEach(item -> {
            if (item.getPublishStatus() == 1) {
                throw new ServiceException("请先下架：" + item.getSpuName());
            }
        });
        return cywProSkuInfoMapper.deleteCywProSkuInfoBySkuIds(skuIds);
    }

    /**
     * 删除sku信息信息
     *
     * @param skuId sku信息主键
     * @return 结果
     */
    @Override
    public int deleteCywProSkuInfoBySkuId(Long skuId)
    {
        return cywProSkuInfoMapper.deleteCywProSkuInfoBySkuId(skuId);
    }

    @Override
    public List<CywProSkuInfo> selectListBySpuIds(List<Long> spuIds) {
        return cywProSkuInfoMapper.selectListBySpuIds(spuIds);
    }

    @Override
    public List<CywProSkuInfo> selectListBySkuIds(List<Long> skuIds) {
        return cywProSkuInfoMapper.selectListBySkuIds(skuIds);
    }

    @Override
    public int updateBatch(List<CywProSkuInfo> cywProSkuInfos) {
        return cywProSkuInfoMapper.updateBatch(cywProSkuInfos);
    }


}
